package stack_opt

import (
	"Yasuo/iface/iyasuo"
	"Yasuo/utils"
	"fmt"
	"github.com/xuri/efp"
)

// 临时变量操作
type VarOPT struct{
	tokenValue string // 此时代表字母a, b ,c....
}

func NewVarOPT(tv string) *VarOPT  {
	return &VarOPT{tokenValue:tv}
}

// 临时变量归根结缔就是操作数
// 1. 查找a量map，没有就赋值，有就更新
// 2. 把临时变量的值存储进opd里面去
func (vo *VarOPT) InventedOpt(iys iyasuo.IYasuo) error {
	var (
		next int
		tokens []efp.Token
		m map[string]float64
		ok bool
		mv float64
		u *utils.Utils
		tv string
	)

	u = utils.NewUtils()
	next = iys.GetNext()
	tokens = iys.GetTokens()
	m = iys.GetVar()
	tv = tokens[next].TValue

	if mv, ok = m[tv]; !ok {
		fmt.Println("没有map", tv, mv)
		mv = 0
	}

	// 更新map
	// fmt.Println("存储进去的map",tv, mv)
	iys.SetVar(tv, mv)
	// 取出来的放进opd
	u.PushBack(iys.GetOPD(), mv)

	iys.SetNext(iys.GetNext()+1)
	fmt.Println("var>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
	printStack(iys)

	return nil
}

